#include <alt_types.h>

/* Function:  		memtst
 * Description:		Аналог стандартной функции memcpy.
 * dst 				Указатель на приемник
 * src  			Указатель источника
 * num_byte			Количество записываемых байт.
 * return			Количество записанных байт
 */

alt_u8 memtst(alt_u8* mem1, alt_u8* mem2, alt_u32 num_byte)
{
	alt_u8 err = 0;
	register alt_u32 i;

	i = num_byte;
	while (i-- > 0)
	{
		if (*mem1++ != *mem2++)
			err = 1;
	};
	return err;
};


/* Function:  		memcpy
 * Description:		Аналог стандартной функции memcpy.
 * dst 				Указатель на приемник
 * src  			Указатель источника
 * num_byte			Количество записываемых байт.
 * return			Количество записанных байт
 */
alt_u32 memcpy_8(alt_u8* dst, alt_u8* src, alt_u32 num_byte)
{
	register alt_u32 i;
	i = num_byte;
	while (i-- > 0)
	{
		*dst++ = *src++;
	};
	return num_byte;
};

/* Function:  		memcpy_32
 * Description:		Аналог стандартной функции memcpy. Но запись ведется сразу по 4 байта.
 * 					Количество записываемых байт выравнивается до 4, в меньшую сторону.
 * dst 				Указатель на приемник
 * src  			Указатель источника
 * num_byte			Количество записываемых байт.
 * return			Количество записанных слов
 */
alt_u32 memcpy_32(alt_u32* dst, alt_u32* src, alt_u32 num_byte)
{
	register alt_u32 i;
	i = num_byte >> 2;
	while (i-- > 0)
	{
		*dst++ = *src++;
	};
	return num_byte >> 2;
};



/* Function:  		memset
 * Description:		Устанавливает всю память в заданное значние.
 * dst 				Указатель на приемник
 * data  			Устанавливаемое значение
 * num_byte			Количество записываемых байт.
 * return			Количество записанных слов
 */
alt_u32 memset_8(alt_u8* dst, alt_u8 data, alt_u32 num_byte)
{
	register alt_u32 i;
	i = num_byte;
	while (i-- > 0)
	{
		*dst++ = data;
	};
	return num_byte;
};


/* Function:  		memset_32
 * Description:		Устанавливает всю память в заданное значние. Запись ведется сразу по 4 байта.
 * 					Количество записываемых байт выравнивается до 4, в меньшую сторону.
 * dst 				Указатель на приемник
 * data  			Устанавливаемое значение
 * num_byte			Количество записываемых байт.
 * return			Количество записанных слов
 */
alt_u32 memset_32(alt_u32* dst, alt_u32 data, alt_u32 num_byte)
{
	register alt_u32 i;
	i = num_byte >> 2;
	while (i-- > 0)
	{
		*dst++ = data;
	};
	return num_byte >> 2;
};
